From e52f56f4fccacd5de7bac7de8b19dc31b6e90468 Mon Sep 17 00:00:00 2001 From: "maf46@burn.cl.cam.ac.uk" Date: Fri, 25 Feb 2005 15:48:58 +0000 Subject: [PATCH] bitkeeper revision 1.1236.1.24 (421f48ea99x29xFFaWbGuSxh3s_UYQ) Minor VMX cleanups Signed-off-by: michael.fetterman@cl.cam.ac.uk --- xen/arch/x86/dom0_ops.c | 8 +++++--- xen/arch/x86/domain.c | 5 +---- xen/arch/x86/vmx_intercept.c | 4 ++++ xen/arch/x86/vmx_io.c | 6 +++--- xen/arch/x86/x86_32/traps.c | 2 +- xen/include/asm-x86/shadow.h | 16 +++++++++------- 6 files changed, 23 insertions(+), 18 deletions(-) diff --git a/xen/arch/x86/dom0_ops.c b/xen/arch/x86/dom0_ops.c index 3c11c8af6d..289085849c 100644 --- a/xen/arch/x86/dom0_ops.c +++ b/xen/arch/x86/dom0_ops.c @@ -349,8 +349,9 @@ void arch_getdomaininfo_ctxt( { int i; #ifdef __i386__ /* Remove when x86_64 VMX is implemented */ - unsigned long vmx_domain; +#ifdef CONFIG_VMX extern void save_vmx_execution_context(execution_context_t *); +#endif #endif c->flags = 0; @@ -359,9 +360,10 @@ void arch_getdomaininfo_ctxt( sizeof(ed->arch.user_ctxt)); #ifdef __i386__ - vmx_domain = ed->arch.arch_vmx.flags; - if (vmx_domain) +#ifdef CONFIG_VMX + if ( VMX_DOMAIN(ed) ) save_vmx_execution_context(&c->cpu_ctxt); +#endif #endif if ( test_bit(EDF_DONEFPUINIT, &ed->ed_flags) ) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index d74d4cea46..d3f2076cbe 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -723,9 +723,6 @@ void switch_to(struct exec_domain *prev_p, struct exec_domain *next_p) struct tss_struct *tss = init_tss + smp_processor_id(); execution_context_t *stack_ec = get_execution_context(); int i; -#ifdef CONFIG_VMX - unsigned long vmx_domain = next_p->arch.arch_vmx.flags; -#endif __cli(); @@ -758,7 +755,7 @@ void switch_to(struct exec_domain *prev_p, struct exec_domain *next_p) } #ifdef CONFIG_VMX - if ( vmx_domain ) + if ( VMX_DOMAIN(next_p) ) { /* Switch page tables. */ write_ptbase(next_p); diff --git a/xen/arch/x86/vmx_intercept.c b/xen/arch/x86/vmx_intercept.c index d9299d5c22..0e30b85c42 100644 --- a/xen/arch/x86/vmx_intercept.c +++ b/xen/arch/x86/vmx_intercept.c @@ -29,6 +29,8 @@ #include #include +#ifdef CONFIG_VMX + /* for intercepting io request after vm_exit, return value: 0--not handle; 1--handled */ int vmx_io_intercept(ioreq_t *p) { @@ -264,3 +266,5 @@ void vmx_hooks_assist(struct exec_domain *d) } } + +#endif /* CONFIG_VMX */ diff --git a/xen/arch/x86/vmx_io.c b/xen/arch/x86/vmx_io.c index fcfe2ff36a..763c9d5d28 100644 --- a/xen/arch/x86/vmx_io.c +++ b/xen/arch/x86/vmx_io.c @@ -387,11 +387,11 @@ void vmx_intr_assist(struct exec_domain *d) void vmx_do_resume(struct exec_domain *d) { - if ( d->arch.guest_vtable ) + if ( test_bit(VMX_CPU_STATE_PG_ENABLED, &d->arch.arch_vmx.cpu_state) ) __vmwrite(GUEST_CR3, pagetable_val(d->arch.shadow_table)); else - // we haven't switched off the 1:1 pagetable yet... - __vmwrite(GUEST_CR3, pagetable_val(d->arch.guest_table)); + // paging is not enabled in the guest + __vmwrite(GUEST_CR3, pagetable_val(d->arch.phys_table)); __vmwrite(HOST_CR3, pagetable_val(d->arch.monitor_table)); __vmwrite(HOST_ESP, (unsigned long)get_stack_bottom()); diff --git a/xen/arch/x86/x86_32/traps.c b/xen/arch/x86/x86_32/traps.c index 4222596706..244ef6bf70 100644 --- a/xen/arch/x86/x86_32/traps.c +++ b/xen/arch/x86/x86_32/traps.c @@ -96,7 +96,7 @@ void show_registers(struct xen_regs *regs) const char *context; #ifdef CONFIG_VMX - if ( current->arch.arch_vmx.flags && (regs->eflags == 0) ) + if ( VMX_DOMAIN(current) && (regs->eflags == 0) ) { __vmread(GUEST_EIP, &eip); __vmread(GUEST_ESP, &esp); diff --git a/xen/include/asm-x86/shadow.h b/xen/include/asm-x86/shadow.h index 26b1a36b49..c02079fa89 100644 --- a/xen/include/asm-x86/shadow.h +++ b/xen/include/asm-x86/shadow.h @@ -69,7 +69,7 @@ extern unsigned long shadow_l2_table( struct domain *d, unsigned long gmfn); static inline void shadow_invalidate(struct exec_domain *ed) { - if ( !ed->arch.arch_vmx.flags ) + if ( !VMX_DOMAIN(ed) ) BUG(); memset(ed->arch.shadow_vtable, 0, PAGE_SIZE); } @@ -766,7 +766,7 @@ static inline void __update_pagetables(struct exec_domain *ed) } } - if ( ed->arch.arch_vmx.flags ) + if ( VMX_DOMAIN(ed) ) { // Why is VMX mode doing this? shadow_invalidate(ed); @@ -780,20 +780,22 @@ static inline void __update_pagetables(struct exec_domain *ed) static inline void update_pagetables(struct exec_domain *ed) { - if ( unlikely(shadow_mode_enabled(ed->domain)) ) + struct domain *d = ed->domain; + + if ( unlikely(shadow_mode_enabled(d)) ) { - shadow_lock(ed->domain); + shadow_lock(d); __update_pagetables(ed); - shadow_unlock(ed->domain); + shadow_unlock(d); } - if ( !shadow_mode_external(ed->domain) ) + if ( !shadow_mode_external(d) ) { #ifdef __x86_64__ if ( !(ed->arch.flags & TF_kernel_mode) ) ed->arch.monitor_table = ed->arch.guest_table_user; else #endif - if ( shadow_mode_enabled(ed->domain) ) + if ( shadow_mode_enabled(d) ) ed->arch.monitor_table = ed->arch.shadow_table; else ed->arch.monitor_table = ed->arch.guest_table; -- 2.30.2